// 导入路劲模块
const path = require('path')
// 导入文件模块
const fs = require('fs')



// 首先我输入的肯定是一个数组
const arrname='role'
const arr=  [ 
    {filename:'role',method:'get',url:'/sys/role/{id}',message:'接口描述信息',param:'',paramsMessage:'id',back:'{code,data:{companyId,description,id,name,permilds},message,success}'},
    {filename:'role',method:'put',url:'/sys/role/{id}',message:'根据Id更新角色',param:'',paramsMessage:'id',back:'{code,data:{companyId,description,id,name,permilds},message,success}'},
    {filename:'role',method:'post',url:'/sys/role/{id}',message:'添加角色',param:'data',paramsMessage:'id',back:'{code,data:{companyId,description,id,name,permilds},message,success}'},
    {filename:'role',method:'get',url:'/sys/role',message:'接口描述信息',param:'',paramsMessage:'',back:'{code,data:{companyId,description,id,name,permilds},message,success}'},
    {filename:'role',method:'get',url:'/sys/role',message:'接口描述信息',param:'',paramsMessage:'',back:'{code,data:{companyId,description,id,name,permilds},message,success}'}
]
// 要根据上述数据能够生成对对应的函数



// 首先封装一个文件读取操作
// 定义一个读取文件函数
function readFile(path){
    return new Promise((resolve,reject)=>{
        fs.readFile(path,'utf-8',(err,data)=>{
            if(err) throw reject(err)
               resolve(data)
        })

    })
} 
// 设置首字母转大写函数
  function ucWords(str){
    c= str[0].toUpperCase()
    str= str.replace(/^\S/,c)
     return str
  }
  //   const  obj = {filename:'role',method:'get',url:'/sys/role',message:'接口描述信息',param:'',back:''}
// 需要得到个  getRoleById()
// 命名系统已经完成
 function cname(obj){
    const {filename,method,url} = obj
    if(url.includes('{')){
     let n = url.split('/')
     let q = []
     let loo = ''
     n.forEach(item=>{
           if(item.includes('{')){
             loo = item.replace(/^\S|\S$/g,'')
            //  console.log(loo);
           }else{
             q.push(item)
           }    
     })
     if(q[q.length-1]===filename){
         return method+ucWords(filename)+`By`+ucWords(loo)
     }
     return method+ucWords(filename)+ucWords(q[q.length-1])+`By`+ucWords(loo)
 }
 
     return method+ucWords(filename) 
 }

 // 创建一个自动URL的函数
// '/sys/role/{id}'  转化成'/sys/role+id
function curl(obj){
    const {url} = obj
  if(url.includes('{')){
      let urlArr = url.split('/')
      // let newUel=''
    return  urlArr.reduce((prev,item,index)=>{
          if(item.includes('{')&&index===(urlArr.length-1)){
              let uc = item.replace(/^\S|\S$/g,'')
              prev += `\'+ ${uc}`
          }else if(item.includes('{')&&index !== (urlArr.length-1)){
              let uc = item.replace(/^\S|\S$/g,'')
              prev += `\' + ${uc} + `
          }
          else {
            item && ( prev+=`/${item}`)
          }
          return prev
      },'\'')
      
  }
  return '\''+url+'\''
  }
// 首先应该是读取公共文件内容
// 创建一个文件夹，在里面添加文件
fs.mkdir('API', async (err)=>{
    if(err) console.log('文件夹创建出错');
    const data = await readFile('./common.txt','utf-8')
  
    // 这个时候传过来了一个数组 
  const final=  arr.reduce((prev,item)=>{
        let cxm = cname(item)
        let url = curl(item)
        let q= data.replace(/~A~/gm,item.param).replace(/~F~/gm,item.method).replace(/~B~/gm,item.paramsMessage).replace(/~D~/gm,url).replace(/~E~/gm,cxm).replace(/~G~/gm,item.param||item.paramsMessage).replace(/~C~/gm,item.back).replace(/~H~/gm,item.message)   
         prev+=q 
         return prev+'\n'+'\n'
    },'')
    // 可以把这个数据写入数组，然后对数组进行迭代
    fs.writeFile('./API/role.js',final,(err)=>{
        if(err) return console.log('文件写入出错');

    })

})




